import datetime
from serial_operate import modify_time_forzen
from tools import get_all_meter_addr, get_pc_time, get_collect_err, execute_sql, assert_data, \
    modify_centos_current_date_restart, make_collect_err_data

ip = '192.168.253.113'
com_name = 'com4'

# 1、插入前天的采集数据, 插入前天的计算数据
print("开始第一步骤")
modify_centos_current_date_restart(ip)
make_collect_err_data(ip, -2, 1, -1, 1)

# 2、修改站端时间
_, pc_datetime = get_pc_time()
list_meter_addr = get_all_meter_addr(ip)
modify_stand_time = (pc_datetime - datetime.timedelta(days=1)).replace(hour=23, minute=13, second=0)
_, collect_time, _, _, _, ratio, angle, _ = modify_time_forzen(ip, com_name, modify_stand_time)
sql_frequency, sql_amplitude, sql_phase, sql_ratio_error, sql_angle_error, sql_status = get_collect_err(
    ip, list_meter_addr[0], collect_time)
print(sql_frequency, sql_amplitude, sql_phase, sql_ratio_error, sql_angle_error, sql_status)

# 【步骤1检查点】 计算数据为前天的计算结果,报文中的响应时间为昨天的22点0分。
assert_data(3, ratio / 1000, sql_ratio_error)
assert_data(3, angle / 1000, sql_angle_error)
assert collect_time == modify_stand_time.replace(hour=22, minute=0).strftime("%Y-%m-%d %H:%M:%S")

# 步骤二：
# 1、修改数据库中线路1的前天的计算状态字为4
print("开始第二步骤")
execute_sql(ip, "UPDATE err_voltage_error SET calculate_status=4 WHERE channel_num=1;")

# 2、修改站端时间并请求召测
modify_stand_time = pc_datetime.replace(hour=0, minute=13, second=0)
_, collect_time, _, _, _, ratio, angle, status = modify_time_forzen(ip, com_name, modify_stand_time)
sql_frequency, sql_amplitude, sql_phase, sql_ratio_error, sql_angle_error, sql_status = get_collect_err(
    ip, list_meter_addr[0], collect_time)

# 【步骤2检查点】 计算数据为0，计算状态字为4，报文中的响应时间为昨天的23点0分。
assert ratio == 0
assert angle == 0
assert status == 4
assert collect_time == (modify_stand_time + datetime.timedelta(days=-1)).replace(hour=23, minute=0).strftime(
    "%Y-%m-%d %H:%M:%S")

# 步骤三：
# 1、修改站端时间并请求召测
print("开始第三步骤")
modify_stand_time = pc_datetime.replace(hour=1, minute=13, second=0)
_, collect_time, _, _, _, ratio, angle, status = modify_time_forzen(ip, com_name, modify_stand_time)

# 【步骤3检查点】 计算数据为0，计算状态字为15，报文中的响应事件为当天的0点0分
assert ratio == 0
assert angle == 0
assert status == 15
assert collect_time == modify_stand_time.replace(hour=0, minute=0).strftime("%Y-%m-%d %H:%M:%S")

# 步骤四：
# 1、修改站端时间并请求召测
print("开始第四步骤")
modify_stand_time = pc_datetime.replace(hour=2, minute=13, second=0)
_, collect_time, _, _, _, ratio, angle, status = modify_time_forzen(ip, com_name, modify_stand_time)

# 【步骤4检查点】 计算数据为0，计算状态字为15，报文中的响应事件为当天的1点0分
assert ratio == 0
assert angle == 0
assert status == 15
assert collect_time == modify_stand_time.replace(hour=1, minute=0).strftime("%Y-%m-%d %H:%M:%S")
